// DatastoreItem.h : Declaration of the CDatastoreItem

#pragma once
#include "resource.h"       // main symbols

#include "TSSrv_i.h"
#include "DBHelper.h"
#include "Datastore.h"
#include "Fields.h"

#if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
#error "Single-threaded COM objects are not properly supported on Windows CE platform, such as the Windows Mobile platforms that do not include full DCOM support. Define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA to force ATL to support creating single-thread COM object's and allow use of it's single-threaded COM object implementations. The threading model in your rgs file was set to 'Free' as that is the only threading model supported in non DCOM Windows CE platforms."
#endif



// CDatastoreItem

class ATL_NO_VTABLE CDatastoreItem :
	public CComObjectRootEx<CComSingleThreadModel>,
	public CComCoClass<CDatastoreItem, &CLSID_DatastoreItem>,
	public ISupportErrorInfo,
	public IDispatchImpl<IDatastoreItem, &IID_IDatastoreItem, &LIBID_TSSrv, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
    friend class CDatastoreItems;
	friend class CDatastore;

public:
	CDatastoreItem()
	{
	}

DECLARE_REGISTRY_RESOURCEID(IDR_DATASTOREITEM)


BEGIN_COM_MAP(CDatastoreItem)
	COM_INTERFACE_ENTRY(IDatastoreItem)
	COM_INTERFACE_ENTRY(IDispatch)
	COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()

// ISupportsErrorInfo
	STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);


	DECLARE_PROTECT_FINAL_CONSTRUCT()

	HRESULT FinalConstruct()
	{
		m_spRS.CreateInstance(__uuidof(ADODB::Recordset));
		return S_OK;
	}

	void FinalRelease()
	{
	}

public:
	/// <summary>test</summary>
	STDMETHOD(get_Id)(INT* pVal);
	STDMETHOD(Edit)(void);
	STDMETHOD(Save)(void);
	STDMETHOD(get_Fields)(IFields** pVal);
	STDMETHOD(get_Type)(TsDatastoreItemTypeEnum* pVal);
	STDMETHOD(get_Revision)(LONG* pVal);


	INT m_Id;
	INT m_Revision;
	TsDatastoreItemTypeEnum m_Type;

	ADODB::_RecordsetPtr m_spRS;
	CDatastore * m_pDs;
public:
	//HRESULT Init(CDBHelper dbHelper);
private:
	HRESULT Init(CDatastore * pDs, TsDatastoreItemTypeEnum type, INT id);

	CComObject<CFields> * m_cached_fields;
};

OBJECT_ENTRY_AUTO(__uuidof(DatastoreItem), CDatastoreItem)
